package ec.edu.ucacue.siop.proceso.iniciar.datosCalidad;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import org.hibernate.Session;

import ec.edu.ucacue.siop.dao.historico.HistoriaVariablesCalidadDAO;
import ec.edu.ucacue.siop.dao.historico.HistoriaVariablesCalidadDAOImpl;
import ec.edu.ucacue.siop.dao.recurso.VariableCalidadDAO;
import ec.edu.ucacue.siop.dao.recurso.VariableCalidadDAOImpl;
import ec.edu.ucacue.siop.modelo.operacion.historico.HistoriaVariablesCalidad;
import ec.edu.ucacue.siop.modelo.recurso.VariableCalidad;
import ec.edu.ucacue.siop.proceso.iniciar.aplicacion.ContVarCalidad;
import ec.edu.ucacue.siop.utilidades.HibernateUtil;



public class CargaVarMesCalidad {

	private String error;

	public String getError() {
		return error;
	}

	public void setError(String error) {
		this.error = error;
	}
	
	public boolean cargar(String nomDirectorio, String hoja, String a_o) {
		
		File directorio = new File(nomDirectorio);
		FileWriter result;
		try {
			result = new FileWriter("error.txt",true);
			BufferedWriter bw = new BufferedWriter(result);
			PrintWriter wr = new PrintWriter(bw);
			
			if(!directorio.isDirectory()) {
				error = "No es directorio";
				wr.println(error);
				return false;
			}
			LectorHojaDiariaCalidad lector = new LectorHojaDiariaCalidad();
			String[] listaArchivos = directorio.list();
			ordenar(listaArchivos);
	
			if(!listaArchivos[0].contentEquals("0tablaRelacionCal.xls")){
				error = "No existe la tabla de relacion";
				wr.println(error);
				return false;
			}
			if(!lector.leerFiltro(nomDirectorio+"/0tablaRelacionCal.xls") ){
				error = lector.getError();
				return false;
			}
			HistoriaVariablesCalidadDAO hvcDao = new HistoriaVariablesCalidadDAOImpl();
			VariableCalidadDAO vcDao = new VariableCalidadDAOImpl();
			Session ses = HibernateUtil.beginTransaction();
			List<VariableCalidad> listaVarCal = vcDao.findAll(VariableCalidad.class);
			
			long[] relacion = lector.getRelacion();
			int colInicio = lector.getFilaInicio();
			int colFinal = lector.getFilaFin();
			for(int i=1;i<listaArchivos.length;i++){
				if(lector.leer(nomDirectorio+"/"+listaArchivos[i], "Reporte Diario", colInicio, colFinal, a_o) ) {
					List<ContVarCalidad24H> listaContenedor = lector.getLista();
					for(int iCont =0; iCont<listaContenedor.size(); iCont++){
						if(relacion[iCont]!=0) {
							List<ContValCal> listaDiaria = listaContenedor.get(iCont).getLista24Horas();
							for(int j=0; j<listaDiaria.size(); j++) {
								HistoriaVariablesCalidad historia = hvcDao.create(listaVarCal.get((int) relacion[iCont] -1), 
										listaDiaria.get(j).getValor(), listaDiaria.get(j).getFecha());
								hvcDao.save(historia);
							}
						}
					}
				}
				else {
					System.out.println("se ignoran los datos del " + listaArchivos[i]);

					wr.println("se ignoran los datos del " + listaArchivos[i]);
				}
			}
			HibernateUtil.commitTransaction();
			HibernateUtil.closeSession();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return true;
	}
	private static void ordenar(String[] listadoArchivos) {
		for(int i=0; i<listadoArchivos.length-1;i++) {
			
			for(int j=i+1; j<listadoArchivos.length; j++) {
				if(listadoArchivos[i].compareTo(listadoArchivos[j]) > 0) {
					String aux = listadoArchivos[i];
					listadoArchivos[i] = listadoArchivos[j];
					listadoArchivos[j] = aux;
				}
			}
		}
	}
}
